/**
 * @param {number} x
 * @param {number} n
 * @return {number}
 */
var myPow = function (x, n) {
  if (n === 0) return 1;

  // 处理负数指数
  if (n < 0) {
    x = 1 / x;
    n = -n;
  }

  let result = 1;
  let currentProduct = x;

  // 迭代快速幂
  while (n > 0) {
    if (n % 2 === 1) {
      result *= currentProduct;
    }
    currentProduct *= currentProduct; // 底数平方
    n = Math.floor(n / 2); // 指数减半
  }

  return result;
};